/**
 * 
 */
package com.bbva.gptf.dto.servicio.simulacion;

import java.math.BigDecimal;
import java.util.List;

import com.bbva.gptf.dto.bean.ColumnaVista;
import com.bbva.gptf.dto.bean.InstrumentosSimulacion;
import com.bbva.gptf.dto.bean.Integracion;
import com.bbva.gptf.dto.bean.PlazoSimulacion;
import com.bbva.gptf.dto.bean.ReporteSimulacion;
import com.bbva.gptf.dto.bean.Simulacion;
import com.bbva.gptf.dto.bean.Usuario;
import com.bbva.gptf.dto.bean.Validacion;
import com.bbva.jee.arq.spring.core.httpService.HttpClient;

/**
 * @author jcompean
 * 
 */
@HttpClient(serviceName = "servicioSimulacionFacadeHttp")
public interface ServicioSimulacionFacade {

	/**
	 * @author iavilalo
	 * @param listaPosiciones
	 *            List
	 * @param restricciones
	 *            Boolean
	 * @param cdGestor
	 *            BigDecimal
	 * @param cdUsuarioUmo
	 *            String
	 * @return boolean
	 */
	public boolean generarOrdenes(
			final List<InstrumentosSimulacion> listaPosiciones,
			final boolean restricciones, final BigDecimal cdGestor,
			final String cdUsuarioUmo);

	/**
	 * @author iavilalo
	 * @param listaPosicion
	 *            List
	 * @param listaIntegracion
	 *            List
	 * @param tipoOperacion
	 *            String
	 * @return List
	 */
	public List<InstrumentosSimulacion> integrar(
			List<InstrumentosSimulacion> listaPosicion,
			List<Integracion> listaIntegracion, String tipoOperacion,
			Long tipoConsulta, String tipoMercado);

	/**
	 * @param simulacion
	 * @return
	 */
	public List<ReporteSimulacion> obtenerReporteSimulacion(
			final Simulacion simulacion);

	/**
	 * @author iavilalo
	 * @param usuario
	 *            Usuario
	 * @return Simulacion
	 */
	public Simulacion obtieneDatosUsuario(Usuario usuario);

	/**
	 * @author iavilalo
	 * @param tipoMercado
	 *            String
	 * @param tipoValor
	 *            String
	 * @param emisora
	 *            String
	 * @param serie
	 *            String
	 * @param plazoMin
	 *            Integer
	 * @param plazoMax
	 *            Integer
	 * @return List
	 */
	public List<Integracion> obtieneInstrumentos(String tipoMercado,
			String tipoValor, String emisora, String serie, Integer plazoMin,
			Integer plazoMax);

	/**
	 * @author iavilalo
	 * @param listaPosicion
	 *            List
	 * @param listaIntegracion
	 *            List
	 * @param tipoOperacion
	 *            String
	 * @return List
	 */
	public List<Integracion> obtieneMontos(
			List<InstrumentosSimulacion> listaPosicion,
			List<Integracion> listaIntegracion, String tipoOperacion);

	/**
	 * @author iavilalo
	 * @param tipoValor
	 *            String
	 * @param emisora
	 *            String
	 * @return List
	 */
	public List<PlazoSimulacion> obtienePlazos(String tipoValor, String emisora);

	/**
	 * @author iavilalo
	 * @param lista
	 *            List
	 * @param tipoMercado
	 *            String
	 * @param tipoBusqueda
	 *            String
	 * @param valor
	 *            BigDecimal
	 * @param tipoPosicion
	 *            Long
	 * @return List
	 */
	public List<InstrumentosSimulacion> obtienePosicion(
			List<InstrumentosSimulacion> lista, String tipoMercado,
			String tipoBusqueda, BigDecimal valor, Long tipoPosicion,
			String cdBancomer);

	/**
	 * @author iavilalo
	 * @param listaPosiciones List
	 * @param tipoMercado String
	 * @return List
	 */
	public List<Validacion> obtieneRestricciones(List<InstrumentosSimulacion> listaPosiciones,
			String tipoMercado);

	/**
	 * @author iavilalo
	 * @param listaPosicion
	 *            List
	 * @return List
	 */
	public List<InstrumentosSimulacion> recalculo(
			List<InstrumentosSimulacion> listaPosicion, Long tipoPosicion, Boolean titulosOperar);

	
	/**
	 * @author iavilalo
	 * @param cdUsuario BigDecimal
	 * @param cdVista BigDecimal
	 * @return List
	 */
	public List<ColumnaVista> obtenerConfiVista(BigDecimal cdUsuario, BigDecimal cdVista);

	/**
	 * @author iavilalo
	 * @param listaOrdenes List
	 * @param cdGestor BigDecimal
	 * @param cdUsuarioUmo String
	 * @return boolean
	 */
	public boolean generarOrdenesLayout(List<InstrumentosSimulacion> listaOrdenes,
			BigDecimal cdGestor, String cdUsuarioUmo);
}
